//#include<stdio.h>
//
//int* twoSum(int* nums, int numsSize, int target)
//{
//    int* ret = NULL;
//    for(int i = 0; i < numsSize - 1; i++)
//    {
//        for (int j = i; j < numsSize; j++)
//        {
//            if (nums[i] + nums[j] == target)
//            {
//                ret = (int*)malloc(sizeof(int) * 2);
//                ret[0] = i;
//                ret[1] = j;
//                return ret;
//            }
//        }
//    }
//    return ret;
//}

//#include <stdio.h>
//
//struct S
//{
//    int a;
//    char c;
//    double d;
//};
//#define OFFSETOF(type,name)    (unsigned int)&(((type *)0)->name)
//
//int main()
//{
//    printf("%d\n", OFFSETOF(struct S, c));
//    return 0;
//}

#include <stdio.h>
#define SWAP(num) (num = ((num&0x55555555)<<1)+((num&0xaaaaaaaa)>>1))

int main()
{
    int num = 10;            
    SWAP(num);
    printf("%d", num);    
    return 0;
}